# !/usr/bin/python
# -*- coding: UTF8 -*-
# archivo : menu.py
#
###############################################################################
#
#
# Eco-Py - Juego educativo, ayudando a preservar el medioambiente
# Copyright (c) 2010 Escuela de Oficios San Cayetano // escuelasancayetano at gmail dot com
# Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo
# los términos de la Licencia Pública General GNU, tal y como está publicada
# por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su
# elección) cualquier versión posterior.
#
# Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA
# GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN
# FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.
#
# Usted debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa; si no es así, escriba a la Free Software Foundation,
# Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU.
#
#
###############################################################################

# Imports
import pygame, sys, gettext, locale, os
from pygame.locals import *
from init_f import screen
import config_fab

#-----------------------------------------------------------------------
# Constantes
clock = pygame.time.Clock()
imagen_presentacion = pygame.image.load('images/perdiste1.jpg').convert()

#-----------------------------------------------------------------------
#Clases

class Menu:
    '''Arma el menú del juego'''
    font = pygame.font.Font('fonts/cmr10.ttf', 30)
    fondo = pygame.image.load('images/perdiste1.jpg').convert()
    colorEncendido = (200,0,0)
    colorApagado = (0,0,0)
    seleccionado = 0

    def __init__(self, opciones):
        self.opciones = opciones
        self.actualizar()

    def actualizar(self):
        '''Redibuja los objetos'''
        self.imagenes = []
        for texto, funcion in self.opciones:
            text = gettext.gettext(texto)
            imagen0 = self.font.render(text, 1, self.colorApagado)
            imagen1 = self.font.render(text, 1, self.colorEncendido)
            self.imagenes.append( [imagen0, imagen1] )
            self.dibujarFondo()
            self.dibujarOpciones()

    def dibujarOpciones(self):
        '''Opciones del menú y separación de las mismas'''
        altura_de_opcion = 80
        # ubicación del menú
        x = 259
        y = 265
        
        for indice, imagenes in enumerate(self.imagenes):
            if indice == self.seleccionado:
                imagen = imagenes[1]
            else:
                imagen = imagenes[0]
            posicion = (x, y + altura_de_opcion * indice)
            screen.blit(imagen, posicion)
        pygame.display.flip()

    def moverSeleccion(self, direccion):
        '''Movimiento entre opciones del menú'''
        self.seleccionado += direccion
        # procura que el cursor esté entre las opciones permitidas
        if self.seleccionado < 0:
            self.seleccionado = 0
        elif self.seleccionado > len(self.opciones) - 1:
            self.seleccionado = len(self.opciones) - 1
        #sonido_menu.play() 
        self.dibujarOpciones()

    def dibujarFondo(self):
        '''Ubicar imagen en el fondo'''
        screen.blit(self.fondo, (0, 0))

    def salirDelMenu(self):
        '''Salir del menú'''
        import menu
        menu.main()

    def run(self):
        '''Correr la aplicación'''
        # Elegir opciones dentro del menú principal
        self.salir = False
        while not self.salir:
            for event in pygame.event.get():
                if event.type == QUIT:
                    salir = True
            pressed_keys = pygame.key.get_pressed()
            if pressed_keys[K_UP]:
                self.moverSeleccion(-1)
            elif pressed_keys[K_DOWN]:
                self.moverSeleccion(1)
            elif pressed_keys[K_RETURN]:
                #sonido_menu.play() 
                titulo, funcion = self.opciones[self.seleccionado]
                funcion()
                self.actualizar()
            pygame.display.flip()
            clock.tick(10)


class MenuPrincipal(Menu):
    def __init__(self):
        opciones = [
            (u'           Continuar', self.comenzar_nuevo_juego),
            (u'              Salir', self.salirDelMenu)
        ]
        Menu.__init__(self, opciones)

    def comenzar_nuevo_juego(self):
        '''Ir a la primera misión del juego'''
        import fabrica
        fabrica.main()

#-----------------------------------------------------------------------
# Funciones

def mostrarImagen(imagen, duracion):
    '''Muestra una imagen en la ventana'''
    screen.blit(imagen, imagen.get_rect(center=screen.get_rect().center))
    ticks_final = pygame.time.get_ticks() + duracion * 1000

    while pygame.time.get_ticks() < ticks_final:
        pygame.display.flip()
        clock.tick(10)   

def main():
    '''Bucle principal'''
    screen = pygame.display.set_mode ((800, 550))
    pygame.mouse.set_visible(False)
    #sonido_menu.play()
    MenuPrincipal().run()

if __name__ == '__main__':
    #pygame.mixer.init()
    main()
